package com.example.big_event.service.impl;

import com.example.big_event.mapper.ArticleMapper;
import com.example.big_event.pojo.Article;
import com.example.big_event.pojo.PageBean;
import com.example.big_event.service.ArticleService;
import com.example.big_event.utils.ThreadLocalUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@Service//声明这是service层
public class ArtitcleServiceimpl implements ArticleService {

    @Autowired
    ArticleMapper mapper;

    @Override
    public void add(Article article) {

        article.setCreateTime(LocalDateTime.now());
        article.setUpdateTime(LocalDateTime.now());

        Map<String,Object> map = ThreadLocalUtil.get();
        Integer id = (Integer) map.get("id");
        article.setCreateUser(id);

        mapper.add(article);

    }

    @Override
    public PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {

        //创建pagebean对象，封装将来查询好的数据

        PageBean<Article> pb = new PageBean<>();

        //开启分页查询-----需要借助于pagehelper插件

        //pageNum是当前页码  pageSize是当前页条数
        PageHelper.startPage(pageNum,pageSize);//mapper不用传入pageNum 和 pageSize是因为将来这个会自动在sql语句后添加limit语句完成分页查询

        Map<String,Object>map = ThreadLocalUtil.get();
        Integer userid = (Integer) map.get("id");//获取用户id，每个用户有着自己写的对应的文章，根据用户id识别

        //调用mapper
        List<Article> list = mapper.list(userid,categoryId,state);

        //pagehelper会返回一个结果，这个结果是List接口的一个实现类对象，
        // Page中提供了方法，可以获取pagehelper中提供的总条数和和当前页码
        // 不强转为Page的话，多态中父类类型不允许调用子类类型中的特有方法

        Page<Article> pa = (Page<Article>) list;

        //把数据填充到pagebean对象中
        pb.setTotal(pa.getTotal());
        pb.setItems(pa.getResult());
        return pb;
    }
}
